from utils.common import pair


class CenterCrop:
    """将输入的 PIL 图像裁剪为给定的大小。

    Args:
        size (int or (int, int)): 期望的输出尺寸。
    """
    def __init__(self, size):
        """
        初始化 CenterCrop 实例。

        Args:
            size (int or (int, int)): 期望的输出尺寸。
        """
        self.size = pair(size)

    def __call__(self, img):
        """
        执行中心裁剪操作。

        Args:
            img (PIL.Image.Image): 待裁剪的 PIL 图像。

        Returns:
            PIL.Image.Image: 裁剪后的图像。
        """
        W, H = img.size
        OW, OH = self.size
        left = (W - OW) // 2
        right = W - ((W - OW) // 2 + (W - OW) % 2)
        up = (H - OH) // 2
        bottom = H - ((H - OH) // 2 + (H - OH) % 2)
        return img.crop((left, up, right, bottom))


